SQL Injection 為攻擊者在應用程式的輸入框中插入惡意 SQL 查詢語句,目的是利用應用程式中存在的查詢漏洞來操控資料庫。這些漏洞通常存在於網頁的登入表單、搜尋框或其他可讓使用者輸入的地方。
單引號閉合
當應用程式未能正確過濾輸入時,攻擊者可以使用單引號閉合查詢,並加入自己的 SQL 語句。例如,原本的 SQL 查詢語句如下:
`SELECT * FROM users WHERE username = 'user' AND password = 'pass';`
若攻擊者在 username 輸入 ' OR '1'='1,那麼查詢語句將變為:
`SELECT * FROM users WHERE username = '' OR '1'='1' AND password = 'pass';`
這樣即使密碼錯誤,查詢語句仍會返回結果,攻擊者可登入成功。
Union-based
將兩個不同表中的數據一起返回,並且通過應用程序顯示給使用者,讓攻擊者能夠看到未經授權的管理員資料。利用 UNION
關鍵字將多個 SQL 查詢合併。需要確定 資料的列數和類型,藉此讀取未授權的資料,例如:
`SELECT name, email FROM users WHERE id = 1 UNION SELECT username, password FROM admins;`
開始進入今天的練習
LAB_1 - Web Gauntlet
看到一個登入頁面,利用前面提到的方式繞過驗證。這邊藉由 filter.php 的頁面可以看到 Round1 不能使用的字元有 or
,這邊將 admin
之後的密碼驗證註解掉,使用 admin'--
,密碼隨意。
進到第二關,被 ban 掉的東西變多了,不能使用這些 like = --
,於是換另外一種註解 /*
,Username 輸入 admin'/
第三關被 ban 的字有 or and = like > < --
,剛剛第二關使用的 payload 還可以繼續用,好耶
第四關,越來越多限制了 orz,or and = like > < -- admin
連 admin
都不行惹。那如果把 admin
隔開呢?使用 ||
來連接。
好耶!第五關。這些不能使用 or and = like > < -- union admin
。不過剛剛第四關的東西好像還是可以用,繼續用 ouob
畫面叫我們可以到 filter.php 看看,發現 flag
LAB_2 - Web Gauntlet 2
還是這個頁面 XD,一樣先到題目給的 filter.php,一樣有被禁止的黑名單or and true false union like = > < ; -- /* */ admin
。不能用註解的方式了,於是我們讓 Password 恆等於 true。Password 輸入 a' is not 'b
flag 順利拿到了
今天的練習就到這邊,以下是參考資料,請搭配服用:
picoCTF web
picoCTF web 2
秒懂 SQL Injection
SQL Injection
內文如有錯誤,還請不吝指教~